package com.carbon.core.util;

import com.carbon.core.lang.Assert;

import java.util.*;

/**
 * 集合工具类
 *
 * @author czq
 * @date 2021-03-01
 */
public class CollectionUtils {

    /**
     * 字符串转 {@code List}
     *
     * @param str   字符串
     * @param regex 分隔符
     * @return {@code List}
     */
    public static List<String> stringToList(String str, String regex) {
        Assert.isNotNull(str);
        Assert.isNotNull(regex);
        return new ArrayList<String>(Arrays.asList(str.split(regex)));
    }


    /**
     * 字符串转 {@code List}
     * <p>
     * 默认采用 英文逗号 {@code ,} 分隔
     *
     * @param str 字符串
     * @return {@code List}
     */
    public static List<String> stringToList(String str) {
        return stringToList(str, ",");
    }

    /**
     * 求两个集合的并集, 重复项仅保留一个
     * <p>
     * <blockquote><pre>
     * ==> [a, b, c, d] [b, c, d, d]
     * <== [a, b, c, d]
     * </pre></blockquote>
     *
     * @param firstColl  第一个集合
     * @param secondColl 第二个集合
     * @param <T>        泛型
     * @return 并集后的结果
     */
    public static <T> Collection<T> union(Collection<T> firstColl, Collection<T> secondColl) {
        if (isEmpty(firstColl) && isEmpty(secondColl)) {
            return new ArrayList<T>();
        } else if (isEmpty(firstColl)) {
            return new ArrayList<T>(secondColl);
        } else if (isEmpty(secondColl)) {
            return new ArrayList<T>(firstColl);
        }
        // 有序
        Set<T> sets = new LinkedHashSet<T>(firstColl);
        sets.addAll(secondColl);
        return new ArrayList<T>(sets);
    }

    /**
     * 集合是否为空
     *
     * @param collection 集合
     * @return 是否为空
     */
    public static boolean isEmpty(Collection<?> collection) {
        return null == collection || collection.isEmpty();
    }

    /**
     * 集合是否存在值
     *
     * @param collection 集合
     * @return 是否存在值
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return !isEmpty(collection);
    }

}
